const tool = {};

// 计算两个经纬度之间的距离，单位为米
tool.getDistanceInMeters = function(lat1, lon1, lat2, lon2) {
	const R = 6371000; // 地球半径，单位为米
	// 计算纬度差值（弧度）
	const dLat = ((lat2 - lat1) * Math.PI) / 180;
	// 计算经度差值（弧度）
	const dLon = ((lon2 - lon1) * Math.PI) / 180;
	// 根据 Haversine 公式计算中间变量 a
	const a =
		Math.sin(dLat / 2) * Math.sin(dLat / 2) +
		Math.cos((lat1 * Math.PI) / 180) *
		Math.cos((lat2 * Math.PI) / 180) *
		Math.sin(dLon / 2) *
		Math.sin(dLon / 2);
	// 根据 Haversine 公式计算中间变量 c
	const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
	// 返回两点之间的距离（米）
	return R * c;
};

// 实现通过自身经纬度找出列表中距离最近的一条数据的方法
tool.findClosestData = function(myLatitude, myLongitude, dataList) {
	let closestData = null;
	let minDistance = Infinity;

	for (const item of dataList) {
		const distance = tool.getDistanceInMeters(
			myLatitude,
			myLongitude,
			item.latitude,
			item.longitude
		);
		if (distance < minDistance) {
			minDistance = distance;
			closestData = item;
		}
	}

	return closestData;
};

// 根据两个经纬度计算距离并格式化输出
tool.formatDistance = function(lat1, lon1, lat2, lon2) {
	const distanceInMeters = tool.getDistanceInMeters(lat1, lon1, lat2, lon2);
	if (distanceInMeters > 1000) {
		// 如果距离大于 1000 米，转换为千米并保留两位小数输出
		return `${(distanceInMeters / 1000).toFixed(2)}km`;
	} else {
		// 如果距离小于等于 1000 米，直接以米为单位输出
		return `${distanceInMeters.toFixed(0)}m`;
	}
};
// 传入一个时间
// 示例：获取 2024 - 09 - 12 是周几
// let result = getDayOfWeek('2024-09-12');
// console.log(result);
tool.getDayOfWeek = (dateString) => {
	let date = new Date(dateString);
	let days = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
	return days[date.getDay()];
}
// 手机密文显示
tool.formatPhoneNumber = (phoneNumber) => {
	if (!phoneNumber || typeof phoneNumber !== 'string') {
		return '';
	}
	const prefix = phoneNumber.slice(0, 3);
	const suffix = phoneNumber.slice(-4);
	return `${prefix}****${suffix}`;
}
// 使用方式
// const phoneNumber = '13812345678';
// const formattedNumber = formatPhoneNumber(phoneNumber);
// console.log(formattedNumber); 
tool.formatDistances = (distance)=> {
  if (distance > 1000) {
    return (distance / 1000).toFixed(1) + 'km';
  } else {
    return distance.toFixed(0) + 'm';
  }
}
export default tool;